package dkffkd23.basic;

public class J08_SungJuk_v4b {

	public static void main(String[] args) {
		// 접근 지정자를 이용해서 SungJuk클래스 정의
		J08SungJuk sj = new J08SungJuk();

		// sj.name="지현";
		// name 멤버변수는 접근 지정자가 private이므로 위 코드처럼 작성하면 오류 발생
		// sj = new J08SungJuk("지현", 85, 65, 44);
		// 어쩔 수 없이 생성자를 이용해서 name, kor, eng, mat 멤버변수를 초기화 함
		// System.out.println(sj.name);
		// 하지만 기존방식으로 name 변수를 출력하려해도 private접근 지정자 때문에 오류 발생
		System.out.println();

		// 따라서 private로 선언된 멤버변수를 조작하거나 값을 읽어오려면 그것을 위한 특별한 메서드를 작성
		// 실무에서는 setter/getter메서드를 작성한다.
		sj.setName("수지");
		sj.setKor(99);
		sj.setEng(85);
		sj.setMat(46);

		// System.out.println(sj.getName());
		// System.out.println(sj.getKor());
		// System.out.println(sj.getEng());
		// System.out.println(sj.getMat());

		// toString()메서드를 이용해서 객체의 모든 멤버변수 출력하기
		System.out.println(sj.toString());

	}// 메인

}// 클래스

class J08SungJuk {
	private String name;
	private int kor;
	private int eng;
	private int mat;
	private int tot;
	private double avg;
	private char grd;

	public J08SungJuk() {
	}

	public J08SungJuk(String name, int kor, int eng, int mat, int tot,
			double avg, char grd) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.tot = tot;
		this.avg = avg;
		this.grd = grd;
	}

	// setter 메서드 : 멤버변수에 값을 setting하기 위한 메서드
	// public void set멤버변수명 (자료형 멤버 변수명) {
	// this.멤버변수명=멤버변수명; }

	public void setName(String name) {
		this.name = name;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	// getter메서드 : 멤버변수의 값을 get하기 위한 메서드
	// public 멤버변수자료형 get멤버변수명(){
	// retutn 멤버변수명;
	// }
	public String getName() {
		return name;
	}

	public int getKor() {
		return kor;
	}

	public int getEng() {
		return eng;
	}

	public int getMat() {
		return mat;
	}

	//객체지향 프로그래밍에서는 메서드에 너무 많은 책임을 부여하는 것을 금지하고 있음.
	//예를 들어, getTot메서드를 살펴보면 단순히 tot변수의 값을 읽어오는 기능외에 
	//입력한 성적 데이터의 대한 총점을 구하는 기능도 포함
	public int getTot() {
		tot = kor + eng + mat;
		return tot;
	}

	public double getAvg() {
		// int imsi=getTot();
		// avg=imsi/3;
		avg = getTot() / 3;
		return avg;
	}

	public char getGrd() {
		switch ((int) getAvg() / 10) {
		case 10:
		case 9:
			grd = '수';
			break;
		case 8:
			grd = '우';
			break;
		case 7:
			grd = '미';
			break;
		case 6:
			grd = '양';
			break;
		default:
			grd = '가';
		}// 메서드의 반환값 유형을 결과값의 종류에 따라 지정
		return grd;
	}

	// 멤버변수의 모든 값을 출력하기 위해 object 클래스가 기본적으로 제공하는 메서드인 toString()을 재정의(override)

	@Override
	// 어노테이션 : 컴파일러를 위한 주석
	public String toString() { // 위에서 작업한 내용의 출력을 한번에 보여줄 수 있다.
								// 수정도 가능. 내가 원하는 내용을 넣으면 된다.
		String result = "";
		result = result + "이름 : " + name;
		result += "  국어 : " + kor;
		result += " 영어 : " + eng;
		result += " 수학 : " + mat;
		result += " 합계 : " + getTot();
		result += " 평균 : " + getAvg();
		result += " 학점 : " + getGrd();

		return result;
	}

}